package io;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

/**
 * 缓冲输出流写出数据的缓冲区问题
 */
public class FlushDemo {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("bos.txt");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        String line = "super idol的笑容都没你的甜。";
        byte[] data = line.getBytes(StandardCharsets.UTF_8);
        bos.write(data);
        /*
            缓冲流的flush方法是强制将缓冲流中已经缓存的数据一次性强制写出

            实际上flush方法是被定义在Flushable接口上的，而该接口被字节输出流的超
            类:OutputStream实现了，这意味着java中所有的字节输出流都有flush方法。
            只不过其他的高级输出流的flush方法默认的实现是调用其链接的流的flush方法，
            目的是将flush动作向下传递，最终传递给缓冲输出流，使其真正做到flush工作。
         */
//        bos.flush();//flush:冲水
        System.out.println("写出完毕");
        bos.close();//缓冲流关闭时会自动flush一次。

    }
}
